package com.sdc.servlets;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.sdc.bean.ProdutoBean;
import com.sdc.bean.UsuarioBean;
import com.sdc.control.ControleArquivo;
import com.sdc.control.ControlePedido;
import com.sdc.control.ControleProdutos;
import com.sdc.control.ControleUsuario;

/**
 * Servlet implementation class Cadastros
 */
public class CadastrosServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private final static int INSERIR_USUARIO = 1;
	private final static int ALTERAR_USUARIO = 2;
	private final static int EXCLUIR_USUARIO = 3;
	private final static int LISTAR_USUARIO = 4;
	private final static int INSERIR_PRODUTO = 5;
	private final static int ALTERAR_PRODUTO = 6;
	private final static int EXCLUIR_PRODUTO = 7;
	private final static int LISTAR_PRODUTO = 8;
	private final static int BLOQUEAR_USUARIO = 9;
	private final static int FILTRA_USUARIO = 10;
	private final static int FILTRA_PRODUTO = 20;
	private ControleUsuario cu = null;
	private ControlePedido cp = null;
	private ControleArquivo ca = null;
	private ControleProdutos cpd = null;
	private UsuarioBean usuario;
	private ProdutoBean produto;

	private RequestDispatcher dispatcher;
	private static final Logger log = Logger.getLogger(CadastrosServlet.class);

	public CadastrosServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// recupera a session
		HttpSession session = request.getSession();
		log.debug("Sess�o recuperada");
		int action = 0;
		if (request.getParameter("action") != null) {
			action = Integer.parseInt(request.getParameter("action"));
			if (session.getAttribute("usuario") != null) {
				UsuarioBean session_user = (UsuarioBean) session
						.getAttribute("usuario");

				if (action > 2 && !session_user.isLogado()) {
					request.setAttribute("erros",
							"Precisa estar logado para realizar esta operacao");
					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				}
			}

		} else {
			dispatcher = request.getRequestDispatcher("index.jsp");
			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}
		}

		log.info("action capturada:" + action);
		switch (action) {

		case INSERIR_USUARIO:
			usuario = new UsuarioBean();
			ControleUsuario cu = new ControleUsuario();

			usuario.setNome(request.getParameter("strNome"));
			usuario.setCpf(request.getParameter("strCpf"));

			if (request.getParameter("intTipo") != null) {

				usuario.setId_tipo_usuario(Integer.parseInt(request
						.getParameter("intTipo")));
			} else {
				usuario.setId_tipo_usuario(1);
			}

			usuario.setDt_nasc(request.getParameter("strDtNascimento"));
			usuario.setSexo(request.getParameter("strSexo"));
			usuario.setEndereco(request.getParameter("strEndereco"));
			usuario.setNumero(Integer.parseInt(request
					.getParameter("strNumero")));
			usuario.setBairro(request.getParameter("strBairro"));
			usuario.setCidade(request.getParameter("strCidade"));
			usuario.setEstado(request.getParameter("strEstado"));
			usuario.setEmail(request.getParameter("strEmail"));
			usuario.setUsuario(request.getParameter("strUsuario"));
			usuario.setSenha(request.getParameter("strConfSenha"));
			if (request.getParameter("strTipoUsuario") != null) {
				usuario.setId_tipo_usuario(Integer.parseInt(request
						.getParameter("strTipoUsuario")));
			}
			// seta situa��o do usu�rio como ativo (default no cadastro)
			usuario.setId_situacao(1);

			cu.inserirUsuario(usuario);

			dispatcher = request
					.getRequestDispatcher("AcessoServlet?action=autenticar&strUsuario="
							+ usuario.getUsuario()
							+ "&strSenha="
							+ usuario.getSenha());

			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}

			break;
		case ALTERAR_USUARIO:
			usuario = new UsuarioBean();
			cu = new ControleUsuario();
			if (session.getAttribute("usuario") != null) {
				UsuarioBean session_user = (UsuarioBean) session
						.getAttribute("usuario");

				if (!session_user.isLogado()) {
					request
							.setAttribute("erros",
									"Você precisa estar logado para realizar esta operação");
					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				}
				usuario = (UsuarioBean) session.getAttribute("usuario");

				usuario.setNome(request.getParameter("strNome"));
				usuario.setCpf(request.getParameter("strCpf"));
				usuario.setDt_nasc(request.getParameter("strDtNascimento"));
				usuario.setSexo(request.getParameter("strSexo"));
				usuario.setEndereco(request.getParameter("strEndereco"));
				usuario.setNumero(Integer.parseInt(request
						.getParameter("strNumero")));
				usuario.setBairro(request.getParameter("strBairro"));
				usuario.setCidade(request.getParameter("strCidade"));
				usuario.setEstado(request.getParameter("strEstado"));
				usuario.setEmail(request.getParameter("strEmail"));
				usuario.setUsuario(request.getParameter("strUsuario"));
				usuario.setSenha(request.getParameter("strConfSenha"));

				if (cu.alterarUsuario(usuario) == 1) {
					request.setAttribute("msg",
							"Usu�rio Atualizado com sucesso!");

					session.setAttribute("usuario", usuario);

					dispatcher = request.getRequestDispatcher("sucess.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}
				} else {
					request
							.setAttribute("erros",
									"Erros durante o processo de atualiza��o, tente mais tarde..");
					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				}
			} else {
				request
						.setAttribute("erros",
								"Voc� precisa estar logado para realizar esta opera��o");
				dispatcher = request.getRequestDispatcher("error.jsp");
				if (!response.isCommitted()) {
					dispatcher.forward(request, response);
				}
			}

			break;
		case EXCLUIR_USUARIO:

			if (request.getParameter("id_usuario") != null) {
				// Excluir outro usu�rio
				cu = new ControleUsuario();
				request.setAttribute("msg",
						"Usu&aacute;rio Excluido com sucesso!");

				if (cu.excluirUsuario(Integer.parseInt(request
						.getParameter("id_usuario"))) == 1) {
					request.setAttribute("msg",
							"Usu&aacute;rio removido com sucesso!");
					dispatcher = request
							.getRequestDispatcher("CadastrosServlet?action=4");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}
				} else {
					request
							.setAttribute("erros",
									"Erros durante o processo de exclusao, tente mais tarde..");

					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				}
			} else {
				// Excluir seu proprio cadastro
				if (session.getAttribute("usuario") != null) {
					cu = new ControleUsuario();
					usuario = (UsuarioBean) session.getAttribute("usuario");
					if (cu.excluirUsuario(usuario.getId_usuario()) == 1) {
						request.setAttribute("msg",
								"Usu&aacute;rio Excluido com sucesso!");
						dispatcher = request
								.getRequestDispatcher("AcessoServlet?action=deslogar");
						if (!response.isCommitted()) {
							dispatcher.forward(request, response);
						}
					} else {
						request
								.setAttribute("erros",
										"Erros durante o processo de exclusao, tente mais tarde..");
						dispatcher = request.getRequestDispatcher("error.jsp");
						if (!response.isCommitted()) {
							dispatcher.forward(request, response);
						}
					}
				} else {
					request.setAttribute("erros",
							"Precisa estar logado para realizar esta operacao");
					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}
				}
			}

			break;
		case LISTAR_USUARIO:

			cu = new ControleUsuario();
			List l = cu.listarUsuarios();
			log.info("Usuarios recuperados [" + l.size() + "]");

			request.setAttribute("usuarios", l);
			dispatcher = request
					.getRequestDispatcher("jsp/sistema/controle/usuarios.jsp");
			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}
			break;

		case LISTAR_PRODUTO:
			if (session.getAttribute("usuario") != null) {
				UsuarioBean session_user = (UsuarioBean) session
						.getAttribute("usuario");

				if (!session_user.isLogado()) {
					request
							.setAttribute("erros",
									"Você precisa estar logado para realizar esta operação");
					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				} else {
					if (session_user.getId_tipo_usuario() == 1) {
						request
								.setAttribute("erros",
										"Você não tem permissão para realizar esta operação");
						dispatcher = request.getRequestDispatcher("error.jsp");
						if (!response.isCommitted()) {
							dispatcher.forward(request, response);
						}

					} else {
						cpd = new ControleProdutos();
						l = cpd.listarProdutos();
						log.info("Produtos recuperados [" + l.size() + "]");

						request.setAttribute("produtos", l);
						dispatcher = request
								.getRequestDispatcher("jsp/sistema/controle/produtos.jsp");

						if (!response.isCommitted()) {
							dispatcher.forward(request, response);
						}
					}

				}
			}

			break;

		case INSERIR_PRODUTO:
			produto = new ProdutoBean();
			cpd = new ControleProdutos();

			produto.setDescricao(request.getParameter("strDescricao"));
			produto.setEspaco(Integer.parseInt(request.getParameter("intSpc")));
			produto.setAtivo(Boolean.parseBoolean(request
					.getParameter("strStatus")));
			produto.setComplemento(request.getParameter("strComplemento"));
			if (request.getParameter("strFoto") != null) {
				produto.setFoto(request.getParameter("strFoto"));
			}
			produto.setPreco_unitario(Double.parseDouble(request
					.getParameter("dblPrecoUnitario")));

			cpd.inserirProduto(produto);

			dispatcher = request
					.getRequestDispatcher("CadastrosServlet?action=8");

			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}

			break;

		case FILTRA_USUARIO:
			cu = new ControleUsuario();
			String p1 = "";
			String p2 = "";
			String p3 = "";
			String p4 = "";
			if (request.getParameter("proc_nome") != null) {
				p1 = request.getParameter("proc_nome");
			}
			if (request.getParameter("proc_usuario") != null) {
				p2 = request.getParameter("proc_usuario");
			}
			if (request.getParameter("proc_dt_cadastro") != null) {
				p3 = request.getParameter("proc_dt_cadastro");
			}
			if (request.getParameter("proc_id_situacao") != null) {
				p4 = request.getParameter("proc_id_situacao");
			}

			String[] prod_param = { p1, p2, p3, p4 };

			l = cu.filtrarUsuarios(prod_param);

			log.info("Clientes recuperados [" + l.size() + "]");

			request.setAttribute("usuarios", l);
			dispatcher = request
					.getRequestDispatcher("jsp/sistema/controle/usuarios.jsp");
			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}

			break;

		case EXCLUIR_PRODUTO:
			cpd = new ControleProdutos();
			int id_produto = 0;
			if (request.getParameter("id_produto") != null) {
				id_produto = Integer.parseInt(request
						.getParameter("id_produto"));
			}

			if (cpd.excluirProduto(id_produto) == 1) {
				request.setAttribute("msg", "Produto Exclu�do com sucesso!");
			}
			l = cpd.listarProdutos();

			log.info("Produtos recuperados [" + l.size() + "]");

			request.setAttribute("produtos", l);
			dispatcher = request
					.getRequestDispatcher("jsp/sistema/controle/produtos.jsp");
			if (!response.isCommitted()) {
				dispatcher.forward(request, response);
			}

			break;
		case FILTRA_PRODUTO:
			cpd = new ControleProdutos();
			p1 = "";
			p2 = "";
			p3 = "";
			p4 = "";
			if (request.getParameter("proc_descricao") != null) {
				p1 = request.getParameter("proc_descricao");
			}
			if (request.getParameter("proc_preco_unitario") != null) {
				p2 = request.getParameter("proc_preco_unitario");
			}
			if (request.getParameter("proc_complemento") != null) {
				p3 = request.getParameter("proc_complemento");
			}
			if (request.getParameter("proc_ativo") != null) {
				p4 = request.getParameter("proc_ativo");
			}

			String[] user_param = { p1, p2, p3, p4 };

			l = cpd.filtrarProdutos(user_param);

			log.info("Produtos recuperados [" + l.size() + "]");

			request.setAttribute("produtos", l);
			dispatcher = request
					.getRequestDispatcher("jsp/sistema/controle/produtos.jsp");

			break;
		case BLOQUEAR_USUARIO:

			if (request.getParameter("id_usuario") != null) {
				cu = new ControleUsuario();

				if (cu.bloquearUsuario(Integer.parseInt(request
						.getParameter("id_usuario"))) == 1) {
					request.setAttribute("msg",
							"Usu&aacute;rio bloqueado com sucesso!");

					dispatcher = request
							.getRequestDispatcher("CadastrosServlet?action=4");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}
				} else {
					request
							.setAttribute("erros",
									"Erros durante o processo de bloquear, tente mais tarde..");

					dispatcher = request.getRequestDispatcher("error.jsp");
					if (!response.isCommitted()) {
						dispatcher.forward(request, response);
					}

				}
			} else {
				request
						.setAttribute("erros",
								"Voce precisa selecionar um usuario para realizar esta operacao");
				dispatcher = request.getRequestDispatcher("error.jsp");
				if (!response.isCommitted()) {
					dispatcher.forward(request, response);
				}
			}

			break;
		default:
			break;
		}

	}
}
